<html>
 <head>
  <title>Mik's Scrolling Battle Text Readme</title>
  <style type="text/css">
   body { font-size : 10pt; font-family : verdana,arial,helvetica,sans-serif; }
   hr   { color : #e0e0e0; }

   a:link    { color : #000060; text-decoration : none; }
   a:visited { color : #000060; text-decoration : none; }
   a:hover   { text-decoration : underline; }

   div#HeaderBlock {background-color : ivory; border : solid #000050 1px; padding : 1ex; margin-top : 2em; margin-bottom : 2em; }
   div#NotificationBlock {font-size : 120%; font-weight : bold; color : red; margin-top : 1em; margin-bottom : 2em; }

   div.TOCTitle   { font-weight : bold; font-size : 12pt; }
   div.TOC        { margin : 2ex 1ex 4em 2ex; }
   div.TOCSection { margin : 1ex 1ex 2ex 2ex; }

   div.SectionTitle { margin-top : 6ex; font-weight : bold; font-size : 14pt; }
   div.SectionBody { margin-top : 2ex; margin-left : 2ex; margin-bottom : 2em; }

   div.SectionBody a:link    { color : #002080; }
   div.SectionBody a:visited { color : #002080; }
   div.SectionBody a:hover   {  text-decoration : underline; }

   td.ParameterName { font-size : 10pt; background-color : #e0e0e0; vertical-align : top; }
   td.ParameterDesc { font-size : 10pt; background-color : #e0e0e0; text-align : left; }
  </style>
 </head>
 <body>
  <center><b>Mik's Scrolling Battle Text Readme</b></center>
  <div id="HeaderBlock">
   Version: 5.13<br />
   Author: Mik<br />
   Released: May 14, 2008<br />
   Official Site: <a href="http://mikord.wowinterface.com">http://mikord.wowinterface.com</a><br /><br />
   <a href="#Credits">See Credits</a>
  </div>

  <a name="TOC"><div class="TOCTitle">Table of Contents:</div></a>
  <div class="TOC">
   <a href="#WhatsNew">What's new?</a><br />
   <a href="#Install">Installation Instructions</a><br />
   <a href="#Description">Description</a><br />
   <a href="#Commands">Commands</a><br />
   <a href="#TriggerSystem">Trigger System Documentation</a><br />
   <div id="TOCSection">
    <ul style="margin-top : 1ex;">
     <li><a href="#MainEvents">Trigger Main Events</a></li>
     <li><a href="#TriggerExceptions">Trigger Exceptions</a></li>
    </ul>
   </div>
   
   <a href="#SearchPatternReference">Search Pattern Reference</a><br />
   <a href="#FAQ">Frequently Asked Questions</a><br />
   <div id="TOCSection">
    <ul style="margin-top : 1ex;">
     <li><a href="#FAQ1">I don't like any of the fonts supplied with MSBT.  How do I use my own fonts?</a></li>
     <li><a href="#FAQ2">How do I create a new trigger?</a></li>
     <li><a href="#FAQ3">How do I add my own custom sounds?</a></li>
     <li><a href="#FAQ4">Is it possible to prevent Mutilate from being merged?</a></li>
     <li><a href="#FAQ5">How do I suppress Vampiric Embrace?</a></li>
     <li><a href="#FAQ6">I want to see skill names even when there is an icon.  Is that possible?</a></li>	 
     <li><a href="#FAQ7">Does MSBT support fonts and sounds from Shared Media?</a></li>
     <li><a href="#FAQ8">Is there a way to show the damage above the target's heads like the default damage text?</a></li>
     <li><a href="#FAQ9">Is MSBT efficient?</a></li>
    </ul>
   </div>
   <a href="#VersionHistory">Version History</a><br />
   <div id="TOCSection">
    <ul style="margin-top : 1ex;">
     <li><a href="#Verions5.12">5.12</a></li>
     <li><a href="#Version5.11">5.11</a></li>
     <li><a href="#Version5.1">5.1</a></li>
     <li><a href="#Version5.03">5.03</a></li>
     <li><a href="#Version5.02">5.02</a></li>	
     <li><a href="#Version5.01">5.01</a></li>	
     <li><a href="#Version5.0">5.0</a></li>	
     <li><a href="#Version4.13">4.13</a></li>	
     <li><a href="#Version4.12">4.12</a></li>
     <li><a href="#Version4.11">4.11</a></li>
     <li><a href="#Version4.1">4.1</a></li>
     <li><a href="#Version4.03">4.03</a></li>
     <li><a href="#Version4.02">4.02</a></li>
     <li><a href="#Version4.01">4.01</a></li>
     <li><a href="#Version4.0">4.0</a></li>
     <li><a href="#Version3.11">3.11</a></li>
     <li><a href="#Version3.1">3.1</a></li>
     <li><a href="#Version3.01">3.01</a></li>
     <li><a href="#Version3.0">3.0</a></li>
     <li><a href="#Version2.11">2.11</a></li>
     <li><a href="#Version2.1">2.1</a></li>
     <li><a href="#Version2.0">2.0</a></li>
     <li><a href="#Version1.03">1.03</a></li>
     <li><a href="#Version1.02">1.02</a></li>
     <li><a href="#Version1.01">1.01</a></li>
     <li><a href="#Version1.0">1.0</a></li>
    </ul>
   </div>
   <a href="#Credits">Credits</a><br />

  </div>

  <div class="SectionTitle"><a name="WhatsNew">What's New?</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   <ul>
    <li>The threshold based triggers such as "Low Mana" and "Low Health" will once again display the current amount.</li>
   </ul>
  </div>

  <div class="SectionTitle"><a name="Install">Installation Instructions</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   Unzip the contents into the AddOns directory of your WoW game directory.<br /><br />
   This is typically C:\Program Files\World of Warcraft\Interface\AddOns.<br /><br />
   <b>If you are upgrading the mod from a previous version, make sure to delete the old version prior to installing
   the new version.</b>
  </div>

  <div class="SectionTitle"><a name="Description">Description</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   MSBT is designed to be an extremely lightweight, efficient, and highly configurable mod that makes it easier to see combat
   information by scrolling the information on the screen in separate, dynamically creatable scroll areas. It is a replacement
   for Blizzard's Floating Combat Text and Damage output.<br /><br />

   <b>Features:</b>
   <ul>
    <li>Lightweight and efficient design.</li>
    <li>Scroll incoming damage/heals, outgoing damage/heals, and notifications in separate configurable scroll areas on the playing field.</li>
    <li>Add triggers that will allow you to show notifications based on a variety of conditions.</li>
    <li>Assign a sound file to play for events/triggers.</li>
    <li>Dynamically create new scroll areas and assign any event/trigger to them.</li>
    <li>Customize the position, size, animation style, enabled state, font style, font size, font outline, and opacity for each of the scroll areas.</li>
    <li>Customize each individual event's color, font style, font size, font outline, opacity, output message, enabled state, and scroll area.</li>
    <li>Set "Master Font" settings that will be inherited by all of the scroll areas and the events in them unless they are overridden at the scroll area or event level.</li>
    <li>Merge AoE data into one event with cumulative damage/healing done with number of normal and crits specified.</li>
    <li>Show overhealing amounts against yourself or party/raid members.</li>
    <li>Color damage amounts according to damage type.</li>
    <li>Show partial effects (resists, absorbs, vulnerabilities, etc) colored according to type.</li>
    <li>Filter output information with a full suite of spam controls.</li>
    <li>Load on demand options.</li>

    <li>For mod developers:
     <ul>
      <li>
       Output your own scrolling messages with the MikSBT.DisplayMessage function instead of having
       to create your own frame and animation code.  You can also use your own font by first registering
       it with MSBT via the MikSBT.RegisterFont function.
      </li>
      <li>Create custom animation styles.</li>
      <li>See the included API.html file for reference information.</li>
     </ul>
    </li>
   </ul>

   <br />
   <b>Supported Events:</b>
   <ul>
    <li>Incoming:</li>
    <ul>
     <li>Melee Damage, Misses, Dodges, Parries, Blocks, Absorbs, and Immunes</li>
     <li>Skill Damage, Damage Over Time (DoTs), Misses, Dodges, Parries, Blocks, Absorbs, Immunes, Reflects, and Interrupts</li>
     <li>Spell Resists</li>
     <li>Pet Melee Damage, Misses, Dodges, Parries, Blocks, Absorbs, and Immunes</li>
     <li>Pet Skill Damage, Damage Over Time (DoTs), Misses, Dodges, Parries, Blocks, Absorbs, and Immunes</li>
     <li>Pet Spell Resists</li>
     <li>Heals and Heals Over Time (HoTs)</li>
     <li>Environmental Damage</li>
    </ul>
    <br />
    <li>Outgoing:</li>
    <ul>
     <li>Melee Damage, Misses, Dodges, Parries, Blocks, Absorbs, Immunes, Evades</li>
     <li>Skill Damage, Damage Over Time (DoTs), Misses, Dodges, Parries, Blocks, Absorbs, Immunes, Reflects, Interrupts, and Evades</li>
     <li>Spell Resists and Buff Dispels</li>
     <li>Heals and Heals Over Time (HoTs)</li>
     <li>Pet Melee Damage, Misses, Dodges, Parries, Blocks, Absorbs, Immunes, and Evades</li>
     <li>Pet Skill Damage, Damage Over Time (DoTs), Misses, Dodges, Parries, Blocks, Absorbs, Immunes, and Evades</li>
     <li>Pet Spell Resists and Buff Dispels</li>
    </ul>

    <br />
    <li>Notification:</li>
    <ul>
     <li>Buffs / Buff Fades</li>
     <li>Debuffs / Debuff Fades</li>
     <li>Item Buffs / Item Buff Fades</li>
     <li>Enter/Leave Combat</li>
     <li>Power Gains and Losses</li>
     <li>Combo Point Gains</li>
     <li>Combo Points Full</li>
     <li>Honor Gains</li>
     <li>Reputation Gains and Losses</li>
     <li>Skill Gains</li>
     <li>Experience Gains</li>
     <li>Killing Blows (Player and NPC)</li>
     <li>Extra Attacks</li>
     <li>Soul Shard Creation</li>
     <li>Enemy Buff Gains</li>
     <li>Monster Emotes</li>
     <li>Money Gains</li>
     <li>Cooldown Completions</li>
    </ul>

    <br />
    <li>Default Triggers:</li>
    <ul>
     <li>Backlash</li>
     <li>Blackout</li>
     <li>Clearcasting</li>
     <li>Counter Attack</li>
     <li>Execute / Hammer of Wrath</li>
     <li>Frostbite</li>
     <li>Impact</li>
     <li>Kill Command</li>
     <li>Low Health</li>
     <li>Low Mana</li>
     <li>Low Pet Health</li>
     <li>Mongoose Bite</li>
     <li>Nightfall</li>
     <li>Overpower</li>
     <li>Rampage</li>
     <li>Revenge</li>
     <li>Riposte</li>
     <li>Victory Rush</li>
     <li>Viper Sting</li>
    </ul>
   </ul>
  </div>

  <div class="SectionTitle"><a name="Commands">Commands</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   <table cellspacing="3">
    <tr>
     <td class="ParameterName">/msbt</td>
     <td class="ParameterDesc">Shows the options interface.</td>
    </tr>
    <tr>
     <td class="ParameterName">/msbt reset</td>
     <td class="ParameterDesc">Resets the current profile to the default settings.</td>
    </tr>
    <tr>
     <td class="ParameterName">/msbt disable</td>
     <td class="ParameterDesc">Disables the mod.</td>
    </tr>
    <tr>
     <td class="ParameterName">/msbt enable</td>
     <td class="ParameterDesc">Enables the mod.</td>
    </tr>
    <tr>
     <td class="ParameterName">/msbt version</td>
     <td class="ParameterDesc">Shows the current version.</td>
    </tr>
    <tr>
     <td class="ParameterName">/msbt help</td>
     <td class="ParameterDesc">Shows the command usage.</td>
    </tr>
   </table>
  </div>  

  <div class="SectionTitle"><a name="TriggerSystem">Trigger System Documentation</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   The trigger system is a powerful, flexible, and efficient system that allows you to specify custom events to be displayed based on
   specific game events that are not already handled by default.  There are several mechanisms in place to ensure triggers are efficient as
   possible so they are not needlessly wasting CPU cycles checking conditions that aren't relevant.  Due to this optimization, several common
   triggers are included by default.
   <br /><br />
   The system is based around <a href="#MainEvents">main events</a> and <a href="#TriggerExceptions">exceptions</a>.  Each trigger can have
   one or more <a href="#MainEvents">main events</a> each with unique conditions.  After ANY (or relationship) one of the <a href="#MainEvents">main events</a>
   occurs and its conditions are true, the trigger will then check the <a href="#TriggerExceptions">exceptions</a> before firing.
   The trigger will NOT fire if ANY (or relationship) of the <a href="#TriggerExceptions">exceptions</a> are true.
   <br /><br />
   Triggers will try to choose an appropriate icon based on the <a href="#MainEvents">main event</a> that fired it.
   <br /><br />
   The <a href="#FAQ">Frequently Asked Questions</a> section has step-by-step instructions on the process of <a href="#FAQ2">creating a trigger</a>.
   <br /><br />
   The following is a description of the fields unique to the trigger system interface:
   <br /><br />
   <table cellspacing="3">
    <tr>
     <td class="ParameterName" nowrap="nowrap">Output Message:</td>
     <td class="ParameterDesc">
      This is the message that will be displayed when the trigger fires.  As detailed in the <a href="#MainEvents">main events</a> table,
      some of the <a href="#MainEvents">main events</a> return captured information that can be accessed with substitution codes of %1 or %2.
      <br /><br />
      In addition, most <a href="#MainEvents">main events</a> allow %n to be substituted with the name of the source of the event and %r to be
      substituted with the name of the recipient of the event.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Trigger Classes:</td>
     <td class="ParameterDesc">
      This allows you to set the classes that you want the trigger to apply to.  <b>NOTE: THIS IS YOUR
      CLASS NOT THE TARGET CLASS.</b>  You may look at the Execute trigger for an example.  Since Warrior is
      selected, the trigger will only apply when you are playing on a warrior.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a href="#MainEvents">Main Events</a>:</td>
     <td class="ParameterDesc">
      This allows you to define which <a href="#MainEvents">main events</a> should begin the process of testing the trigger.  When <b>ANY</b>
      (or relationship) of these main events apply and their conditions are true, the trigger will then make sure none of the
      <a href="#TriggerExceptions">exceptions</a> are true before firing.
      <br /><br />
      The <a href="#MainEvents">main events</a> table below details the purpose of each event along with its available conditions.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a href="#TriggerExceptions">Trigger Exceptions</a>:</td>
     <td class="ParameterDesc">
      This allows you define <a href="#TriggerExceptions">exceptions</a> to prevent the trigger from firing. 
      <br /><br />
      They are only checked if one of the <a href="#MainEvents">main events</a> and its conditions has already occurred.
      <br /><br />
      The <a href="#TriggerExceptions">trigger exceptions</a> table below details the purpose of each exception along with its
      available conditions.
     </td>
    </tr>
   </table>
   <br /><br /><br />
   <a name="MainEvents"><span style="font-weight : bold; font-size : 110%">Trigger Main Events:</span></a>
   <br /><br />
   <table cellspacing="3">
    <tr>
     <td class="ParameterName" nowrap="nowrap">Health Threshold:</td>
     <td class="ParameterDesc">
      Fires when a health percentage falls below or rises above the chosen threshold depending on which direction is selected.
      <br /><br />
      Conditions:
      <ul>
       <li>Affected Unit - The trigger will only fire if the threshold has been crossed for this unit.</li>
       <li>Hostile Only - The affected unit must be hostile.  <b>NOTE:</b> "You" can never be hostile, so don't check it in conjunction with yourself!</li>
       <li>Direction - Specifies whether the trigger should fire when the health percentage falls below or rises above the threshold.</li>
       <li>Threshold - The percentage that must be crossed for the trigger to fire.</li>
      </ul>
      Available Substitution Codes:
      <ul>
       <li>%1 - The actual amount of health.</li>
       <li>%r - The name of the unit whose health changed.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Mana Threshold:</td>
     <td class="ParameterDesc">
      Fires when a mana percentage falls below or rises above the chosen threshold depending on which direction is selected.
      <br /><br />
      The conditions and available substitution codes are identical to a health threshold.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Energy Threshold:</td>
     <td class="ParameterDesc">
      Fires when an energy percentage falls below or rises above the chosen threshold depending on which direction is selected.
      <br /><br />
      The conditions and available substitution codes are identical to a health threshold.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Rage Threshold:</td>
     <td class="ParameterDesc">
      Fires when a rage percentage falls below or rises above the chosen threshold depending on which direction is selected.
      <br /><br />
      The conditions and available substitution codes are identical to a health threshold.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Crit:</td>
     <td class="ParameterDesc">
      Fires when an incoming or outgoing critical hit is landed.
      <br /><br />
      Conditions:
      <ul>
       <li>Direction - Specifies whether the trigger should fire on an incoming (to you) or outgoing (from you) critical hit.</li>
      </ul>
      Available Substitution Codes:
      <ul>
       <li>%1 - The name of the skill the caused the crit. <b>NOTE:</b> This will be blank when the crit was from a skill such as a regular swing.</li>
       <li>%n - The name of the unit who did the crit.</li>
       <li>%r - The name of the unit who was crit.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Block:</td>
     <td class="ParameterDesc">
      Fires when an incoming or outgoing attack is blocked.
      <br /><br />
      The conditions and available substitution codes are identical to a Crit.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Dodge:</td>
     <td class="ParameterDesc">
      Fires when an incoming or outgoing attack is dodged.
      <br /><br />
      The conditions and available substitution codes are identical to a Crit.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Parry:</td>
     <td class="ParameterDesc">
      Fires when an incoming or outgoing attack is parried.
      <br /><br />
      The conditions and available substitution codes are identical to a Crit.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Buff Application:</td>
     <td class="ParameterDesc">
      Fires when a buff is applied to a unit.
      <br /><br />
      Conditions:
      <ul>
       <li>Affected Unit - The trigger will only fire if the buff was applied to this unit.</li>
       <li>Hostile Only - The affected unit must be hostile.  <b>NOTE:</b> "You" can never be hostile, so don't check it in conjunction with yourself!</li>
       <li>Skill Name - The <b>case-sensitive</b> name of the buff that trigger will fire on.</li>
       <li>Amount - The application number of the buff.  This is typically 1 for most buffs.</li>
      </ul>
      Available Substitution Codes:
      <ul>
       <li>%1 - The name of the buff.</li>
       <li>%2 - The number of applications of the buff.</li>
       <li>%r - The name of the unit who received the buff.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Buff Fade:</td>
     <td class="ParameterDesc">
      Fires when a buff fades from a unit.
      <br /><br />
      Conditions:
      <ul>
       <li>Affected Unit - The trigger will only fire if the buff faded from this unit.</li>
       <li>Hostile Only - The affected unit must be hostile.  <b>NOTE:</b> "You" can never be hostile, so don't check it in conjunction with yourself!</li>
       <li>Skill Name - The <b>case-sensitive</b> name of the buff that trigger will fire on.</li>
      </ul>
      Available Substitution Codes:
      <ul>
       <li>%1 - The name of the buff.</li>
       <li>%r - The name of the unit who the buff faded from.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Debuff Application:</td>
     <td class="ParameterDesc">
      Fires when a debuff is applied to a unit.
      <br /><br />
      The conditions and available substitution codes are identical to a Buff Application.  See above for further details.
     
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Debuff Fade:</td>
     <td class="ParameterDesc">
      Fires when a debuff fades from a unit.
      <br /><br />
      The conditions and available substitution codes are identical to a Buff Fade.  See above for further details.
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Cast Start:</td>
     <td class="ParameterDesc">
      Fires when a skill with a cast time has started.
      <br /><br />
      Conditions:
      <ul>
       <li>Affected Unit - The trigger will only fire if this unit started the cast.</li>
       <li>Hostile Only - The affected unit must be hostile.  <b>NOTE:</b> "You" can never be hostile, so don't check it in conjunction with yourself!</li>
       <li>Skill Name - The <b>case-sensitive</b> name of the skill for which the cast is starting.</li>
      </ul>
      Available Substitution Codes:
      <ul>
       <li>%1 - The name of the skill for which the cast is starting.</li>
       <li>%n - The name of the unit that started the cast.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Killing Blow:</td>
     <td class="ParameterDesc">
      Fires when you perform a killing blow.
      <br /><br />
      There are no conditions for this event.
      <br /><br />
      Available Substitution Codes:
      <ul>
       <li>%n - Your name since you are the source of the killing blow.</li>
       <li>%r - The name of the unit that was killed.</li>
      </ul>
     </td>
    </tr>
   </table>
   <br /><br /><br />
   <a name="TriggerExceptions"><span style="font-weight : bold; font-size : 110%">Trigger Exceptions:</span></a>
   <br /><br />
   <table cellpacing="3">
    <tr>
     <td class="ParameterName" nowrap="nowrap">Buff Active:</td>
     <td class="ParameterDesc">
      This exception will be true if the specified buff is currently active on you.
      <br /><br />
      Conditions:
      <ul>
       <li>Skill name - The <b>case-sensitive</b> name of the buff to check.</li>
       <li>Reverse Logic - Makes this exception check if a buff is currently INACTIVE on you.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Insufficient Power:</td>
     <td class="ParameterDesc">
      This exception will be true if you currently have less rage or energy than the specified amount.
      <br /><br />
      Conditions:
      <ul>
       <li>Amount - The amount of rage or energy to check.</li>
       <li>Reverse Logic - Makes this exception true if you currently have MORE rage or energy than the specified amount.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Insufficient Combo Points:</td>
     <td class="ParameterDesc">
      This exception will be true if you currently have less combo points than the specified amount.
      <br /><br />
      Conditions:
      <ul>
       <li>Amount - The amount of combo points to check.</li>
       <li>Reverse Logic - Makes this exception true if you currently have MORE combo points than the specified amount.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Not In Arena:</td>
     <td class="ParameterDesc">
      This exception will be true if you currently not in the arena.
      <br /><br />
      Conditions:
      <ul>
       <li>Amount - The amount of rage or energy to check.</li>
       <li>Reverse Logic - Makes this exception true if you ARE currently in the arena.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Not In PvP Zone:</td>
     <td class="ParameterDesc">
      This exception will be true if you currently not in a PvP Zone which includes all battlegrounds and the arena.
      <br /><br />
      Conditions:
      <ul>
       <li>Amount - The amount of rage or energy to check.</li>
       <li>Reverse Logic - Makes this exception true if you ARE currently in a PvP Zone.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Trigger Recently Fired:</td>
     <td class="ParameterDesc">
      This exception will be true if the trigger has been fired within the last number of seconds specified.
      <br /><br />
      Conditions:
      <ul>
       <li>Amount - The number of seconds to test.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Skill Unavailable:</td>
     <td class="ParameterDesc">
      This exception will be true if the specified skill is not known or is on cooldown.  It does not cover other
      facets such as necessary reagents, appropriate range, etc.
      <br /><br />
      Conditions:
      <ul>
       <li>Skill Name - The <b>case-sensitive</b> name of the skill to check.</li>
       <li>Reverse Logic - Makes this exception true if the specified skill IS known or on cooldown.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Trivial Target:</td>
     <td class="ParameterDesc">
      This exception will be true if the current target is trivial.  A trivial unit is a unit that a grey to you and does
      not yield experience.
      <br /><br />
      Conditions:
      <ul>
       <li>Reverse Logic - Makes this exception true if the current target is NOT trivial.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap">Warrior Stance:</td>
     <td class="ParameterDesc">
      This exception will be true if you are playing a warrior and the current stance is the specified stance.
      <br /><br />
      Conditions:
      <ul>
       <li>Warrior Stance - The stance to check.</li>
       <li>Reverse Logic - Makes this exception true if the current stance is NOT the selected stance.</li>
      </ul>
     </td>
    </tr>
   </table>
  </div>

  <div class="SectionTitle"><a name="SearchPatternReference">Search Pattern Reference</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   Here is the official lua reference for patterns:
   <blockquote>
    <span style="font-weight : bold; font-size : 110%">Character Class:</span>
    <br /><br />

    A <i>character class</i> is used to represent a set of characters. The following combinations are allowed in describing a character class:
    <ul>

     <li>x: (where x is not one of the magic characters ^$()%.[]*+-?) represents the character x itself.</li>
     <li>.: (a dot) represents all characters.</li>
     <li>%a: represents all letters.</li>
     <li>%c: represents all control characters.</li>
     <li>%d: represents all digits.</li>
     <li>%l: represents all lowercase letters.</li>

     <li>%p: represents all punctuation characters.</li>
     <li>%s: represents all space characters.</li>
     <li>%u: represents all uppercase letters.</li>
     <li>%w: represents all alphanumeric characters.</li>
     <li>%x: represents all hexadecimal digits.</li>
     <li>%z: represents the character with representation 0.</li>

     <li>
      %x: (where x is any non-alphanumeric character) represents the character x. This is the standard way to escape the magic characters. Any punctuation character (even the non magic)
      can be preceded by a '%' when used to represent itself in a pattern.
     </li>
     <li>
      [set]: represents the class which is the union of all characters in set. A range of characters may be specified by separating the end characters of the range with a '-'. All classes
      %x described above may also be used as components in set. All other characters in set represent themselves. For example, [%w_] (or [_%w]) represents all alphanumeric characters plus
      the underscore, [0-7] represents the octal digits, and [0-7%l%-] represents the octal digits plus the lowercase letters plus the '-' character.
      <br /><br />
      The interaction between ranges and classes is not defined. Therefore, patterns like [%a-z] or [a-%%] have no meaning.
     </li>
     <br />
     <li>[^set]: represents the complement of set, where set is interpreted as above.</li>

    </ul>
    For all classes represented by single letters (%a, %c, etc.), the corresponding uppercase letter represents the complement of the class. For instance, %S represents all non-space characters.
    <br /><br />
    The definitions of letter, space, and other character groups depend on the current locale. In particular, the class [a-z] may not be equivalent to %l. 
    <br /><br />

    <span style="font-weight : bold; font-size : 110%">Pattern Item:</span>
    <br /><br />

    A pattern item may be:
    <ul> 
     <li>a single character class, which matches any single character in the class;</li>

     <li>a single character class followed by '*', which matches 0 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;</li>
     <li>a single character class followed by '+', which matches 1 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;</li>
     <li>a single character class followed by '-', which also matches 0 or more repetitions of characters in the class. Unlike '*', these repetition items will always match the shortest possible sequence;</li>
     <li>a single character class followed by '?', which matches 0 or 1 occurrence of a character in the class;</li>
     <li>%n, for n between 1 and 9; such item matches a substring equal to the n-th captured string (see below);</li>
     <li>

      %bxy, where x and y are two distinct characters; such item matches strings that start with x, end with y, and where the x and y are balanced. This means that, if one reads the string from left to right,
      counting +1 for an x and -1 for a y, the ending y is the first y where the count reaches 0. For instance, the item %b() matches expressions with balanced parentheses.
     </li>
    </ul>

    <span style="font-weight : bold; font-size : 110%">Pattern:</span>
    <br /><br />
    A <i>pattern</i> is a sequence of pattern items. A '^' at the beginning of a pattern anchors the match at the beginning of the subject string. A '$' at the end of a pattern anchors the match at the end of the subject string.
    At other positions, '^' and '$' have no special meaning and represent themselves.
    <br /><br />

    <span style="font-weight : bold; font-size : 110%">Captures:</span>
    <br /><br />
    A pattern may contain sub-patterns enclosed in parentheses; they describe captures. When a match succeeds, the substrings of the subject string that match captures are stored (captured) for future use. Captures are numbered
    according to their left parentheses. For instance, in the pattern "(a*(.)%w(%s*))", the part of the string matching "a*(.)%w(%s*)" is stored as the first capture (and therefore has number 1); the character matching "." is
    captured with number 2, and the part matching "%s*" has number 3.
    <br /><br />

    As a special case, the empty capture () captures the current string position (a number). For instance, if we apply the pattern "()aa()" on the string "flaaap", there will be two captures: 3 and 5.
   </blockquote>
  </div>

  <div class="SectionTitle"><a name="FAQ">Frequently Asked Questions</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   <ol>
    <li>
     <a name="FAQ1"><b>I don't like any of the fonts supplied with MSBT.  How do I use my own fonts?</b></a>
     <br /><br />

     <span style="color : red;">WARNING: ALL FONT MODIFICATION WILL REQUIRE THAT YOU COMPLETELY QUIT THE GAME AND RESTART IT.
     RELOADING THE CONSOLE ALONE WILL NOT WORK.</span>
     <br /><br />
     
     NOTE: Keep in mind that if you use your own font files that you need to make sure the font
     supports the characters that will be displayed.  For example the typical way to display buff
     gains is [BuffName].  If the font you use does not have a character glyph for the [ or ]
     characters you will likely see a big ugly block (or nothing at all) instead of the intended characters.  This is
     especially important with non-English clients since a lot of characters aren't supported by
     English fonts.
     <br /><br />

     There are a few ways to use custom fonts:
     <ul>
      <li>
       The first, and easiest, method is to simply replace one of the font files in the
       MikScrollingBattleText\Fonts directory with the truetype font (.ttf) that you want.  The drawback
       to this approach is that the mod's option screen will still reference the font with the old font's name.
       <br /><br />

       For example, if you had a truetype font file "MyUberFont.ttf" you wanted to use.  Rename MyUberFont.ttf to Adventure.ttf
       and replace the Adventure.ttf font file in the MikScrollingBattleText\Fonts directory.  In the MSBT options interface
       it would still be called "Adventure," but it would actually be using the new font.
      </li>
      <br /><br />
      <li>
       The second method is to open the file MSBTFonts.lua in the MikScrollingBattleText directory and find the
       FONT_FILES entry.  Add your font with the appropriate name and path following the same pattern as the other
       entries. One thing to keep in mind with this approach is that due to the way WoW loads its data, I would
       suggest you put the new fonts you want to add in the same place as the current fonts for the mod (MikScrollingBattleText\Fonts)
       to avoid problems with loading.
      </li>
      <br /><br />
      <li>
       The third method is aimed more at mod developers that want to display information using MSBT.  You can call the MikSBT.RegisterFont
       function to register a custom font that you may then specify in your call to MikSBT.DisplayMessage.  See the included API.html file
       for reference information.
      </li>
     </ul>
    </li>
    <br /><br /><br />

    
    <li>
     <a name="FAQ2"><b>How do I create a new trigger?</b></a>
     <br /><br />
     The first step is to <b>read</b> the <a href="#TriggerSystem">Trigger System Documentation</a> section above.
     Every event and exception is explained along with the conditions and available substitution codes.
     <br /><br />
     Once you've read that section, we can continue on to the process for creating triggers.
     <br /><br />
     We will be creating a trigger that notifies us when Polymorph breaks from a hostile unit when we are playing on a mage in the arena.
     <br /><br />
     <ol type="a">
      <li>Since a new trigger is being created, click the Add New Trigger button, enter "Poly Broke - %r!" for the output message, and click Okay.</li>
          
      <li>Click the trigger conditions icon button (the gear) next to the newly added trigger at the bottom of the list.</li>
      <li>
       Click the edit Trigger Classes icon button and uncheck "All" classes.  Check Mage for the class the trigger will apply to.
       It is better to select the specific classes the trigger applies to instead of selecting all classes since by specifying
       classes, the mod can completely ignore the trigger and save resources for the classes to which it does not apply.
      </li>
      <li>Click the Add Event button next to the Main Events label to add a new main event.</li>
      <li>Select Debuff Fade for the Main Event.</li>
      <li>Select Any for the Affected Unit.</li>
      <li>Check the Hostile Only checkbox because we don't want to see when poly fades from our teammates.</li>
      <li>Enter Polymorph for the Skill Name. It is case-sensitive, so make sure you use a capital P.</li>
      <li>Click the Save button to save the new main event and its conditions.</li>
      <li>Click the Add Exception button next to the Trigger Exceptions label to add a new exception.</li>
      <li>Select Not In Arena for the Exception.  This makes it so the trigger will not fire when we aren't in the arena.</li>
      <li>Click the Save button to save the new exception.</li>
      <li>Click the Save button on the trigger frame to save the trigger's new conditions.</li>
     </ol>
     <br /><br />
     The %r used in step a is a substitution code for the name of the unit that the debuff (polymorph in this case) faded from.
     You already knew that though because you read the <a href="#TriggerSystem">Trigger System Documentation</a>!
     <br /><br />
     The color, font settings, sticky state, sound, and output scroll area for the trigger can be set like any other event.
    </li>
    <br /><br />

    <li>
     <a name="FAQ3"><b>How do I add my own custom sounds?</b></a>
     <br /><br />
     <span style="color : red;">WARNING: NEW SOUND FILES WILL REQUIRE THAT YOU COMPLETELY QUIT THE GAME AND RESTART IT BEFORE
     THEY WILL BE PLAYED.  RELOADING THE CONSOLE ALONE WILL NOT WORK.</span>
     <br /><br />

     There are a few methods that can be used to add custom sounds.
     <ul>
      <li>
       The first, and easiest, method is to simply place a .wav file or .mp3 file in the MikScrollingBattleText\Sounds folder
       <b>before</b> you start World of Warcraft.  You may now click the event settings icon for any event/trigger and then click
       the icon next to the sound dropdown.  Enter the name of the file you placed in the folder.
      </li>
      <br /><br />
      <li>
       The second method is to open the file MSBTSounds.lua in the MikScrollingBattleText directory and find the SOUND_FILES entry.
       Add your sound with the appropriate name and path following the same pattern as the other entries. One thing to keep in
       mind with this approach is that due to the way WoW loads its data, I would suggest you put the new sounds you want to add in
       the same place as the current sounds for the mod (MikScrollingBattleText\Sounds) to avoid problems with loading. 
      </li>
      <br /><br />
      <li>
       The third method is aimed more at mod developers. You can call the MikSBT.RegisterSound function to register a custom
       sound. See the included API.html file for reference information.
      </li>
     </ul>
    </li>
    <br /><br />

    <li>
     <a name="FAQ4"><b>Is it possible to prevent Mutilate from being merged?</b></a>
     <br /><br />
     Yes. Add it to the merge exclusions list under the Spam Controls tab in the options interface.
    </li>
    <br /><br />

    <li>
     <a name="FAQ5"><b>How do I suppress Vampiric Embrace?</b></a>
     <br /><br />
     This can be accomplished a couple of different ways.
     <br /><br />

     <ul>
      <li>The preferred method is to add it to the skill suppressions list under the Spam Controls tab.</li>
      <br /><br />
      <li>
       Another way is to use the heal threshold slider under the Spam Controls tab.<br />
       The drawback to this approach is that all heals under the specified value will be suppressed and not
       specifically Vampiric Embrace, which may or may not be your desired behavior.
      </li>
     </ul>
    </li>
    <br /><br />

    <li>
     <a name="FAQ6"><b>I want to see skill names even when there is an icon.  Is that possible?</b></a>
     <br /><br />
     Yes.  Uncheck "Exclusive Skill Names" under the Skill Icons tab.
    </li>
    <br /><br />

    <li>
     <a name="FAQ7"><b>Does MSBT support fonts and sounds from Shared Media?</b></a>
     <br /><br />
     Not directly, but you can download MSBTSharedMedia to add support for it.
    </li>
    <br /><br />

    <li>
     <a name="FAQ8"><b>Is there a way to show the damage above the target's heads like the default damage text?</b></a>
     <br /><br />
     The only way this is possible is using the built-in game damage.  The "Game Damage" option on the General tab will reenable
     it, but keep in mind you will lose all customization capabilities for outgoing damage if you choose to use the game's built-in damage.
     WoW's API does not provide a method to get the position of 3D game objects such as players and mobs.  This is intentional on their
     part and will likely never change.
     <br /><br />
     I do not recommend using the built-in game damage option.  If you take the time to get used to having the damage in a consolidated area,
     you will likely find it superior in many ways.  Aside from the obvious visual customization capabilities of using MSBT's damage display,
     there are many other benefits such as being able to see the damage and healing being done to targets that are not in your viewport, merging
     of AoE with cumulative amounts, throttling of DoT spam, damage thresholds, per skill suppressions for things you don't care about, icons
     annotating which skill caused the damage or healing, and more.
    </li>
    <br /><br />

    <li>
     <a name="FAQ9"><b>Is MSBT efficient?</b></a>
     <br /><br />
     Absolutely.  MSBT 5.0 was completely re-designed from the ground up using Blizzard's new mod statistics
     API tools with the #1 priority of optimization for reduced memory usage and CPU efficiency.  As a result,
     it is both lightweight (low memory usage) and efficient (low CPU usage), which, sadly, is frequently ignored
     in performance discussions.  Performance entails both memory usage and CPU usage. Unless you don't have enough
     RAM available, CPU usage is almost always more of a factor on your FPS than raw memory usage is.
     <br /><br />
     Please don't just take my word for it though.  Test it out for yourself. Blizzard has made it simple to see
     statistics about mod usage with the GetAddOnMemoryUsage and GetAddOnCPUUsage API calls.  Testing a mod will
     give you a true picture of its performance.
     <br /><br /> 
 
     One thing to keep in mind during your testing is that MSBT is written to be completely dynamic.  It will only create exactly what
     objects it needs when it needs them and then reuse them from that point forward.  This means during the first few combat cycles
     you will see a slightly higher increasing rate than you might expect as the first set of objects is created.  The rate will quickly
     stabilize to typically less than 1 KiB/s as the objects begin to be reused.  The main benefits to this approach are less overall memory
     usage and very little memory churn.
     <br /><br />

     Also, don't forget to look at CPU utilization.  As I said above, it is frequently ignored, but it is also important.  Would you
     rather have your CPU spending extra time on the game engine, or wasting cycles on an inefficient mod?
    </li>
   </ol>
  </div>

  <div class="SectionTitle"><a name="VersionHistory">Version History</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   <table cellspacing="3">
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.12">5.12</a></td>
     <td class="ParameterDesc">
      <ul>
      <li>Fixed the error when looting money induced in patch 2.4.2.</li>
      <li>Fixed the erroneous "Low Mana" warnings when in druid forms.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.11">5.11</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Redesigned the trigger system to work with the new combat log mechanics and improve flexibility:
        <ul>
         <li>
          The old main conditions have been replaced with main events that can have several conditions for greater control
          over things such as affected units (target, focus, etc), applications, etc.
         </li>
         <li>
          The old secondary conditions has been replaced with exceptions.  Exceptions will cause the trigger not to fire when
          they are true.  In addition, most exceptions has a "reverse logic" option that causes them to behave as their opposite for
          high flexibility.
         </li>
         <li>
          Triggers now try to choose an appropriate icon based on the main event that fired it.  It is still possible
          to specify an icon that will override the default.
         </li>
         <li>All of the default triggers will now work on non-English clients without the need for localization.</li>
         <li>Any additional triggers you may have created in previous versions will have to be recreated under the new system.</li>
         <li>Added a default trigger for Viper Sting.</li>
         <li>Added the default clearcasting trigger to druids.</li>
        </ul>
       </li>
       <br />
       <li>Skills like "Mangle (Bear)()" will now be displayed as "Mangle" in the cooldown area.</li>
       <li>Animations may now be as slow as 20% of normal instead of the previous 50%.</li>
       <li>Scroll areas can now have a minimum height of 50 down from 100.</li>
       <li>Increased the allowed font size range to 4-38.</li>
       <li>Threshold triggers will no longer misfire when shapeshifting.</li>
       <li>Soul Shard gains will now be displayed again.</li>
       <li>The %t event type will no longer throw an error.</li>
       <li>Added a button to the AddOns tab of Blizzard's Interface Options to launch MSBT's options.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.1">5.1</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>The optional icons module is no longer required.  This is a significant memory savings for those previously using the module.</li>
       <li>Unfortunately, the ability to add and customize triggers is disabled for this release while the system is rewritten.</li>
       <li>
        Rewrote the parser to work with the new combat log mechanics implemented in Patch 2.4.  Since
        manually parsing text strings is no longer required, things like pets with the same name as
        party/raid members will no longer cause confusion.  There also should no longer be problems with
        non-English clients that had strange parsing issues due to ambiguous strings.
       </li>
       <li>Load up memory usage is now around 221 KiB.</li>
       <li>Damage from spell reflects will now be shown to the player who reflected it as if they did the damage.</li>
       <li>The horizontal animation style now has an alternating direction option.</li>
       <li>Added new events for outgoing (offensive) player and pet dispels.</li>
       <li>Internal filtering for identical monster emotes has been added to reduce potential spam.</li>
       <li>Only one five combo point notification will now be shown per combo point cycle.</li>
       <li>Overhealing will now show on heals that have been excluded from merging.</li>
       <li>Fixed an issue regarding cooldowns not being displayed for certain skills like Mangle (Bear).</li>
       <li>Added Simplified Chinese localization.  Thanks to elafor and hscui for their work.</li>
       <li>Updated TOC for Patch 2.4.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.03">5.03</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>
        Updated LibStub in MSBTIcons to resolve incompatibilities with a newer library version.
        This should clear up some issues with other mod compatibility.
       </li>
       <li>Made icons for triggers obey the enable/disable skill icons option.</li>
       <li>Updated for Patch 2.3.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.02">5.02</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Modified the sound system to allow custom registrations for easier sound selection.</li>
       <li>Triggers may now specify a skill name to use for displaying an icon.</li>
       <li>Added suitable icons to most of the default triggers.</li>
       <li>Added parsing for mana gains from sources like Mana Spring totems now that they can be suppressed, if desired.</li>
       <li>Mana gains during Innervate are now shown if the "Hyper Regen" option is set.</li>
       <li>Damage from totems and other miscellaneous "pets" will now be displayed.</li>
       <li>Changed the minimum scroll area width to 10.</li>
       <li>Fixed a problem that was causing all periodic enemy heals and power gains to be shown instead of only buff gains.</li>
       <li>Fixed an issue where delayed cooldowns such as combustion were completing before they should.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.01">5.01</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>DoTs and HoTs may now have independent throttle times.</li>
       <li>Power gains can now be throttled and there is a default Vampiric Touch throttle entry.</li>
       <li>Power gains now have icons when possible.</li>
       <li>Added a "Move All" button to the Events tab to allow the whole category to be moved to a new scroll area quickly.</li>
       <li>Added some logic to counteract ill behaved mods such as Recount and SW_Stats modifying global strings.</li>
       <li>Fixed some issues with the options interface not saving certain fields properly.</li>
       <li>Made search pattern triggers also check secondary conditions to match the behavior of the other condition types.</li>
       <li>Updated the MSBTIcons module .toc file to prevent certain cases where it wasn't being loaded in the correct order (Thanks dylanm).</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version5.0">5.0</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>
        Complete code rewrite to further reduce memory usage and CPU utilization. Blizzard's addition
        of memory and CPU tracking tools to the API were used to help achieve this.  The CPU utilization
        is about 55% less, and the load up memory usage is now around 258 KiB.  
	   </li>
       <li>
        Redesigned the profile system to use a full master/diff approach.  This leads to a substantial
        memory savings when using multiple profiles.  It also adds the benefit of allowing future changes
        to defaults to take place without having to completely reset user profiles.
       </li>
       <li>
        The options interface was streamlined and rewritten using pure lua.  All the tabs and popup
        frames are now dynamically created only when needed.  The options are still load on demand
        and use no resources when not loaded.
       </li>
       <li>Created a new set of spam controls:
        <ul>
         <li>Show ALL power gains <span style="color:red;">WARNING: This can and will spam you!</span></li>
         <li>Show hyper regen (mana gains during Evocation and Spirit Tap)</li>
         <li>Thresholds for Healing, Damage, and Power Gains</li>
         <li>Skill name substitution</li>
         <li>Skill suppression (e.g. Vampiric Embrace)</li>
         <li>Skill abbreviation option with new %sl event code to override at the event level</li>
         <li>Independent throttle times per skill</li>
         <li>Merge exclusion list (e.g. avoid merging mutilate)</li>
        </ul>
       </li>
       <li>
        New font opacity setting that follows the same inheritance mechanics as the other font
        settings, so each individual scroll area and event can have a custom opacity.
       </li>
       <li>
        Added some "high level" controls to the options interface such as a "Toggle All" button to quickly toggle
        the enable state of all events in the selected category. This allows you to disable all incoming pet events
        with one click for example.  Another example is a "Disable Skill Names" checkbox which quickly allows you
        to stop all skill names from being displayed without having to modify every single event and remove the %s.
       </li>
       <li>Added built-in customizable cooldown notifications.</li>
       <li>Crits are now separate events so they can be individually controlled.</li>
       <li>Each scroll area may now have its own independent animation speed.</li>
       <li>Scroll areas now have a customizable width that the animation styles obey when it makes sense.</li>
       <li>New horizontal and static animation styles.</li>
       <li>Created a new default scroll area using the new static animation style.</li>
       <li>Implemented behaviors in the animation system which allow more customization of animation styles.</li>
       <li>Added a new selectable behavior (Normal) to the Pow sticky animation style that will not perform the jiggle effect.</li>
       <li>Added enemy buff gain and monster emote events (spell alert).</li>
       <li>New money gains notification event.</li>
       <li>There is now a full set of incoming pet events.</li>
       <li>Added outgoing pet DoTs.</li>
       <li>Every event can now be assigned a custom sound. (e.g. full combo points)</li>
       <li>Several trigger conditions such as Self Buff Gains can now have multiple entries per trigger.</li>
       <li>Added a debuff application number secondary trigger condition.</li>
       <li>Added a spell usable secondary trigger condition.</li>
       <li>Added several new fonts.</li>
       <li>Added an optional skill icons module.</li>
       <li>Made some minor tweaks to the default display and throttle settings to improve readability.</li>
       <li>Fixed a few parsing issues.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.13">4.13</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Added temporary fix for PlaySoundFile() bug in Patch 2.2.2.</li>
       <li>Updated for Patch 2.2.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.12">4.12</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Added the option to disable/enable Blizzard's new built-in healing display above the target's head.</li>
       <li>Updated for Patch 2.1.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.11">4.11</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Fixed the issue where crits were being improperly displayed on some non-English clients.</li>
       <li>Modified the outgoing crit/block/dodge/parry trigger conditions to only apply to the player and not any pets.</li>
       <li>Added a "Trigger Cooldown" secondary condition.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.1">4.1</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Rewrote the trigger system to allow for multiple conditions while maintaining efficiency. In addition several commonly requested triggers were added.</li>
       <li>Triggers may now have a custom sound assigned to them.</li>
       <li>Added parsing for some new TBC patterns that will fix a few issues where certain events were not showing up.</li>
       <li>Made several parsing optimizations.</li>
       <li>Created an event for incoming and outgoing Spell Interrupts.</li>
       <li>Added Shadowmend to the list of throttled HoTs.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.03">4.03</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Recharacterized some damage based spells into DoTs so they will now follow the throttling mechanics.</li>
       <li>Added damage types to environmental damage so it will now have the damage type colors applied.</li>
       <li>Updated for Patch 2.0.3 / Burning Crusade.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.02">4.02</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>
        Fixed parsing order error with Foreign languages which resolves a lot of issues on foreign clients with substitution codes
        showing up instead of the actual data.
       </li>
       <li>The soul shard notification event should now work again.</li>
       <li>The mana gained form the warlock Dark Pact talent will now be displayed.</li>
       <li>
        Recharacterized healing from some damage based spells (most notably Vampiric Embrace) into HoTs so they
        will now follow the throttling mechanics.  Basically this means those spells should no longer spam you with healing
        if you have HoT and DoT throttling enabled (it's on by default).
       </li>
       <li>Added parsing for damage taken from the tornado in the arenas.</li>
       <li>Added French localization.</li>
       <li>Added more German localization.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.01">4.01</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Fixed the problem induced by the 2.0 patch where wand damage was not showing up.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version4.0">4.0</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Complete code rewrite for even better performance and features.</li>
       <li>
        Major Optimizations:
        <ul>
         <li>
          Rewrote the combat parsing engine to significantly increase performance and lower the memory footprint.
         </li> 
         <li>
          Redesigned the suppression system to use a hash table searching algorithm so that any number of suppressions may be added without any appreciable slowdown.
         </li>
         <li>
          Optimized the default profile handling.  Due to the large number of options, the default
          profile table takes up a decent chunk of memory (around 90 KiB).  In the previous versions, the
          table was always memory resident - even when it wasn't needed.  It is now created dynamically
          only when it's needed, which is the first time you load a new version of the mod or reset a profile
          to its defaults.
         </li>
         <li>
          Redesigned the underlying options tables such that shared information amongst the events is
          only stored once instead of separately for each event.  This saves quite a bit of memory,
          especially when there are multiple profiles.
         </li>
         <li>
          Created a single pool of dynamically created font strings to be shared by the various scroll areas.
          Previously a set number of font strings were created for every scroll area.
         </li>
         <li>Load up memory usage is now around 450 KiB.</li>
        </ul>
       </li>
       <br />

       <li>
        Minor Optimizations:
        <ul>
         <li>
          Trigger system will no longer listen for events that there are no triggers for. Previously it received the same events the mod was already
          parsing and ignored the ones with no triggers.
         </li>
         <li>Reduced the amount of information that needs to be passed around to lower memory usage during operation.</li>
        </ul>
       </li>
       <br />

       <li>
        Rewrote the animation code to work using scaled timing.  Previously the animation was created by moving the text a set
        amount of pixels each update.  This had the effect of causing the animation speed to vary greatly depending on system performance.
        The animations should now keep the same speed regardless of large performance hits, such as those incurred while recording a
        video or during extreme lag.
       </li>
       <li>Each character will now load the last selected profile for that character by default.</li>
       <li>
         Changed the default font to Porky, which has glyphs for most common German, French, and Spanish special characters. In addition, most of the fonts were
         replaced with new versions that support them as well. However, the old Adventure font is still available for those who want to use it.
       </li>
       <li>
        Added an option (enabled by default) to throttle DoTs and HoTs so that only one event for each ability will be displayed within the time period
        specified (2.5 seconds by default). Any additional DoT/HoT abilities that occur while being throttled are merged into one event to be shown once the throttle
        period has passed.  This will reduce the spam when you have HoTs and/or DoTs on multiple targets.
       </li>
       <li>Made scroll areas dynamically creatable and made events/triggers assignable to them.</li>
       <li>
        Ability/Spell damage amounts now use a custom color according to their damage type by default.  The rest of the message will still show up with the event's selected color.
        This behavior can be disabled.
       </li>
       <li>Partial effects (absorbs, resists, glancing, crushing, overheals, etc) can now be individually enabled, disabled, and color coded.</li>
       <li>Separated Debuff and Item Buff Fades from Buff Fades into new notification events.  Totem buffs are now also handled as buff gains and fades.</li>
       <li>Added an Extra Attacks notification event which will give notifications for Windfury, Thrash, Sword Spec, etc.</li>
       <li>Added a Soul Shard Created notification event.</li>
       <li>Overhauled the interface to include the new features.</li>
       <li>Added a font registration function so other mod developers can choose to display their custom messages in their own font.</li>
       <li>Added an animation style registration function so other mod developers can easily provide custom animation styles for MSBT.</li>
       <li>
        Provided an additional file named API.html that is a reference for the publicly accessible functions that
        other mod developers can use to display messages through MSBT and register custom animation styles.
       </li>
      </ul>

     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version3.11">3.11</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>
        Fixed the bug where in certain circumstances the trigger interface would give an error
        when trying to setup a new search pattern trigger.
       </li>
       <li>Made newly created triggers inherit all font settings instead of specifying a font size by default.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version3.1">3.1</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Added support for power gains to yourself from other people.</li>
       <li>
        Increased the number of available event types for the trigger system to allow for greater
        flexibility.  Due to the way the trigger system is designed this will not add much overhead since
        triggers are only parsed against the selected event types.
       </li>
       <li>Alphabetized the list of available trigger events to make finding the one you want easier.</li>
       <li>
        Removed the default Blessing/Judgement of Wisdom suppression.  The user can choose to add one in for it
        if they prefer.
       </li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version3.01">3.01</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Fixed the bug where you could only add one suppression and adding a new one was overwriting it.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version3.0">3.0</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Implemented a low overhead trigger system.  <a href="#TriggerSystem">See documentation above</a>.</li>
       <li>Implemented a suppression system that allows you to suppress particular messages you don't want to see.</li>
       <li>
        Made significant changes to the scroll area settings interface.  The new interface shows all three
        scroll areas at the same time.  Each scroll area is now titled with its coordinates and there are
        editboxes to enter specific coordinates in addition to being able to drag the scroll areas around.
       </li>
       <li>
        Changed the core animation routines to use function pointers in order to eliminate the need for a
        ton of conditional testing.  Previously, every time the animation routine was called (typically
        60-70 times per second for every scrolling item), the animation style and scroll direction were
        checked to calculate how to move the text.  Now those items are only checked during the initial
        animation object setup phase.  This should help performance on slower PCs.
       </li>
       <li>Added the command "/msbt search pattern" to enable an event searching mode which helps identify event types used in the trigger system. See documentation above for more info.</li>
       <li>
        Moved the Low Health, Low Mana, and Execute events into the trigger system.  Due to this change
        the Low Mana and Execute triggers will no longer waste resources checking on classes that don't
        use mana or have an execute ability.  Also moving them into the trigger system made the thresholds
        at which to show the Low Health, and Low Mana warnings selectable.
       </li>
       <li>Made a few minor code performance tweaks to the animation setup "pipeline."</li>
       <li>Added Killing Blow notification events for both players and NPCs.</li>
       <li>Added crushing and glancing hit partial effects.</li>
       <li>The font settings frame can now be moved.</li>
       <li>Fixed a bug where messages added via the MikSBT.DisplayMessage function were being shown even if the scroll area was set to not show messages.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version2.11">2.11</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Disabled Blizzard's new floating text in Patch 1.12 when MSBT is enabled.</li>
       <li>Updated for Patch 1.12.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version2.1">2.1</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Reduced memory usage a little by removing the underlying tables used to store crit information for events that can never be crits. (Down to around 477 KiB)</li>
       <li>To go along with the above change, the font settings interface for events was reworked so that you can no longer set crit information for events that don't support them.</li>
       <li>Added a title at the top of the font settings frame to help distinguish what is being modified.</li>
       <li>Added an Experience Gains notification event.</li>
       <li>Added the capability for notifications to be displayed "sticky" style.</li>
       <li>Fixed the bug induced by patch 1.11 where reputation gains and losses weren't being displayed.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version2.0">2.0</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>
        MAJOR optimization code rewrite:
        <ul>
         <li>Made options load on demand to significantly reduce memory usage and start up time.</li>
         <li>
          Implemented a table recycling system to reuse tables created during combat instead
          of creating new ones and allowing them to be garbage collected.  The net effect is that a
          ton of garbage collection churn has been eliminated.  Thanks go to kergoth and Wobin for
          tips on how to achieve this.
         </li>
         <li>The combat event parser has been changed to reuse one single table for storing the results of the parsed data.</li>
         <li>Streamlined the combat event to screen animation "pipeline."</li>
         <li>Namespaced all code to reduce global namespace pollution.</li>
         <li>
          Load up KiB Usage in v1.03 was approximately 1050 KiB.  This has been reduced to around
          488 KiB. In addition, due to the table recycling system, memory usage during operation is
          much more consistent instead of continuously increasing until the next garbage collection
          cycle.
         </li>
        </ul>
       </li>
       <br />
       <li>
        Added a function to allow messages to be easily displayed through MSBT from external sources.<br />
        This function is MikSBT.DisplayMessage and is detailed in the included API.html file.
       </li>
       <li>Added the command "/msbt stats" to report statistics about the table recycling system.</li>
       <li>Changed the functionality of AoE merges so that the name reported is "Multiple" instead of the last affected unit.</li>
       <li>Added the option to disable "game damage" instead of just always doing it.</li>
       <li>Added the option to disable "sticky crits."</li>
       <li>Added Execute/Hammer of Wrath notification event.</li>
       <li>Separated Heals over time (HoTs) and Damage over time (DoTs) into their own events.</li>
       <li>Added the option to display overhealing.</li>
       <li>Fixed a bug where crits were not being recognized in non-English clients.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version1.03">1.03</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Fixed a bug where options set with a checkbox were not being properly saved on logout.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version1.02">1.02</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Fixed a bug where the global string parser wasn't appropriately accounting for the argument order of non-English clients.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version1.01">1.01</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Updated for Patch 1.11.</li>
      </ul>
     </td>
    </tr>
    <tr>
     <td class="ParameterName" nowrap="nowrap"><a name="Version1.0">1.0</a></td>
     <td class="ParameterDesc">
      <ul>
       <li>Initial version.</li>
      </ul>
     </td>
    </tr>
   </table>
  </div>

  <div class="SectionTitle"><a name="Credits">Credits</a></div>
  <hr size="1" />
  <a href="#TOC">Return to TOC</a><br /><br />
  <div class="SectionBody">
   Thanks to:
   <ul>
    <li>Grayhoof, the author of SCT, for the original mod which inspired this mod.</li>
    <li>Kergoth and Wobin for their suggestions on optimizations via reduced GC churn and namespacing tips.</li>
    <li>Farook for the German localizations.</li>
    <li>Calthas for the French localizations.</li>
    <li>Hscui and Netcookies for the Simplified Chinese localizations.</li>
   </ul>
  </div>
 </body>
</html>